package com.ruoyi.system.mapper;

import com.ruoyi.system.domain.CoContract;
import java.util.List;
import java.util.Map;

/**
 * 合同 数据层
 */
public interface CoContractMapper {
    /**
     * 查询合同列表
     * 
     * @param contract 合同信息
     * @return 合同集合
     */
    public List<CoContract> selectContractList(CoContract contract);

    /**
     * 查询用户的合同列表
     * 
     * @param userId 用户ID
     * @return 合同集合
     */
    public List<CoContract> selectContractsByUserId(Long userId);

    /**
     * 通过合同ID查询合同
     * 
     * @param contractId 合同ID
     * @return 合同对象信息
     */
    public CoContract selectContractById(Long contractId);

    /**
     * 新增合同信息
     * 
     * @param contract 合同信息
     * @return 结果
     */
    public int insertContract(CoContract contract);

    /**
     * 修改合同信息
     * 
     * @param contract 合同信息
     * @return 结果
     */
    public int updateContract(CoContract contract);

    /**
     * 删除合同信息
     * 
     * @param contractId 合同ID
     * @return 结果
     */
    public int deleteContractById(Long contractId);

    /**
     * 批量删除合同信息
     * 
     * @param contractIds 需要删除的合同ID
     * @return 结果
     */
    public int deleteContractByIds(Long[] contractIds);

    /**
     * 更新合同状态
     * 
     * @param contractId 合同ID
     * @param status 状态
     * @return 结果
     */
    public int updateContractStatus(Long contractId, Integer status);

    /**
     * 查询用户的合同统计信息
     * 
     * @param userId 用户ID，如果为null则查询所有用户的统计信息
     * @return 统计信息
     */
    public Map<String, Object> selectContractStatsByUserId(Long userId);

    /**
     * 查询合同类型统计信息
     * 
     * @param userId 用户ID，如果为null则查询所有用户的统计信息
     * @return 统计信息列表
     */
    public List<Map<String, Object>> selectContractTypeStats(Long userId);
}
